<!DOCTYPE html>
<style>
  .shouldNotComposite {
    width: 30px;
    height: 30px;
    margin: 4px;
    background-color: blue;
  }

  .positioned {
    position: relative;
    left: 40px;
  }

  #willChangeContents {
    will-change: contents;
  }

  #willChangeOpacity {
    will-change: opacity;
  }

  #willChangeTransform {
    will-change: -webkit-transform;
  }

  #willChangeTop {
    will-change: top;
  }

  #willChangeLeft {
    will-change: left;
  }

  #animateOpacity {
    -webkit-animation: fade-in-out 0.1s linear infinite alternate;
  }

  @-webkit-keyframes fade-in-out { from { opacity: 0.3; } to { opacity: 0.9; } }
</style>

<script>
  if (window.testRunner) {
    testRunner.dumpAsText();
    testRunner.waitUntilDone();
  }

  function animationEventListener() {
    if (window.testRunner) {
      document.getElementById('layertree').innerText = internals.layerTreeAsText(document);
      testRunner.notifyDone();
    }
  }

  onload = function() {
    document.getElementById('animateOpacity').addEventListener('webkitAnimationIteration', animationEventListener);
  };
</script>
<div id="willChangeContents">
  <div id="willChangeOpacity" class="shouldNotComposite"></div>
  <div>
    <div id="willChangeLeft" class="positioned shouldNotComposite"></div>
  </div>
  <div>
    <div>
      <div id="willChangeTransform" class="shouldNotComposite">
        <div id="willChangeTop" class="positioned shouldNotComposite"></div>
      </div>
    </div>
  </div>
  <div id="animateOpacity" class="shouldNotComposite"></div>
</div>

<pre id="layertree"></pre>
